﻿//WebService：
//在远程服务器上部署一个 WebService 供本地服务调用，将本地服务发送到 WebService 的数据保存或更新到远程服务器
//数据库中并反馈结果给本地服务。

//Windows Service：
//在本地机器上开发一个 Windows 服务，每过一定时间向远程服务器的 WebService 发送更新过的数据。
//期间如果断网（无法将数据发送到远程服务器上），则将发送失败的数据以文本形式保存到本地文本文件中。
//保存时根据不同时间的数据，按照年——月——日的形式建立文件夹，以天为单位保存每一份文本文件。
//当网络恢复时，则将本地文件中的数据优先发送到远程服务器上。


using System.ServiceProcess;
using Wexflow.Core;
using System.Configuration;
using System.ServiceModel;

namespace Wexflow.Clients.WindowsService
{

    public partial class WexflowWindowsService : ServiceBase
    {
        public static string SettingsFile = ConfigurationManager.AppSettings["WexflowSettingsFile"];
        public static WexflowEngine WexflowEngine = new WexflowEngine(SettingsFile); //此处构造函数中已加载所有基础数据

        ServiceHost _serviceHost;
        
        public WexflowWindowsService()
        {
            InitializeComponent();
            ServiceName = "Wexflow";  //ServiceBase
            WexflowEngine.Run();
        }

        public void OnDebug()
        {
            OnStart(null);
        }

        protected override void OnStart(string[] args)
        {
            if (_serviceHost != null)
            {
                _serviceHost.Close();
            }

            // Create a ServiceHost for the WexflowService type and 
            // provide the base address.
            _serviceHost = new ServiceHost(typeof(WexflowService));
                
            // Open the ServiceHostBase to create listeners and start 
            // listening for messages.
            _serviceHost.Open();
        }

        protected override void OnStop()
        {
            if (_serviceHost != null)
            {
                _serviceHost.Close();
                _serviceHost = null;
            }
        }
    }
}
